package com.campus.controller;

import com.campus.pojo.dto.PostCancelDTO;
import com.campus.pojo.dto.PostDTO;
import com.campus.pojo.dto.PostPageQueryDTO;
import com.campus.pojo.dto.PostRejectDTO;
import com.campus.pojo.vo.PostStatisticsVO;
import com.campus.pojo.vo.PostVO;
import com.campus.result.PageResult;
import com.campus.result.Result;
import com.campus.service.PostService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/lostFoundPost")
@Slf4j
public class PostController {
    @Autowired
    private PostService postService;

    /**
     * 各自状态的帖子数量统计
     */
    @GetMapping("/statistics")
    public Result<PostStatisticsVO> statistics() {
        log.info("统计各个状态的帖子数量");
        PostStatisticsVO postStatisticsVO = postService.statistics();
        return Result.success(postStatisticsVO);
    }

    /**
     * 分页查询
     */
    @RequestMapping("/pageQuery")
    public Result<PageResult<PostVO>> pageQuery(PostPageQueryDTO postPageQueryDTO) {
        log.info("分页查询，参数：{}", postPageQueryDTO);
        PageResult<PostVO> pageResult = postService.pageQuery(postPageQueryDTO);
        return Result.success(pageResult);
    }

    /**
     * 根据id查询帖子详情
     */
    @GetMapping("/{id}")
    public Result<PostVO> getById(@PathVariable Long id) {
        log.info("查询帖子详情，id：{}", id);
        PostVO postVO = postService.getById(id);
        return Result.success(postVO);
    }

    /**
     * 更新帖子状态-审核通过
     */
    @PutMapping("/approve/{id}")
    public Result approvePost(@PathVariable Long id) {
        log.info("审核通过：{}",  id);
        postService.updateStatus(id);
        return Result.success();
    }

    /**
     * 拒绝帖子
     */
    @PutMapping("/reject")
    public Result rejectPost(@RequestBody PostRejectDTO postRejectDTO ) {
        log.info("拒绝帖子：{}",  postRejectDTO);
        postService.rejectPost(postRejectDTO);
        return Result.success();
    }

    /**
     * 用户取消发布 或 管理员取消发布
     */
    @PutMapping("/cancel")
    public Result cancelPost(@RequestBody PostCancelDTO postRejectDTO) {
        log.info("取消发布帖子：{}",  postRejectDTO);
        postService.cancelPost(postRejectDTO);
        return Result.success();
    }
    /**
     * 归还物品
     */
    @PutMapping("/return/{id}")
    public Result returnItem(@PathVariable Long id) {
        log.info("归还物品帖子：{}",  id);
        postService.returnItem(id);
        return Result.success();
    }

    /**
     * 认领物品
     */
    @PutMapping("/claim/{id}")
    public Result claimItem(@PathVariable Long id) {
        log.info("认领物品帖子：{}",  id);
        postService.claimItem(id);
        return Result.success();
    }

    /**
     * 发布帖子
     */
    @PostMapping
    public Result addPost(@RequestBody PostDTO postDTO) {
        log.info("发布帖子：{}",  postDTO);
        postService.addPost(postDTO);
        return Result.success();
    }

    /**
     * 修改帖子
     */
    @PutMapping
    public Result updatePost(@RequestBody PostDTO postDTO) {
        log.info("修改帖子：{}",  postDTO);
        postService.updatePost(postDTO);
        return Result.success();
    }



}
